﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Acaweb.Model.Entities.DatosCompuestos;

namespace Acaweb.Model.Entities
{
    public abstract class Asociados
    {
        private int _CodigoEstudiante;
        private int _CodigoInterno;
        private Identificacion _Identificacion;
        private string _Nombres;
        private string _Apellidos;
        private Sexo _Sexo;
        private DatosContacto _DatosCorreo;
        private Identificacion _LibretaMilitar;
        private string _Email;
        private string _Email2;
        private string _EmailEnvio;
        private int _CodigoPlan;
        private PlanesEstudios _PlanEstudio;
        private long _Celular;
        private int _EstratoSocioeconomico;
        private EstadoCivil _EstadoCivil;
        private DatosBachiller _DatosBachiller;
        private DateTime _FechaNacimiento;
        private Municipios _LugarNacimiento;
        private DateTime _FechaMuerte;
        private DatosContacto _DatosResidencia;
        private TipoSangre _TipoSangre;
        private DatosLaboral _DatosLaborales;
        private Personas _DatosPadre;
        private Personas _DatosMadre;
        private Acudientes _Acudiente;
        private Personas _Conyugue;
        private string _EPS;
        private string _DireccionPadres;
        private List<HistorialAcademico> _HistorialAcademico;
        private List<HistorialLaboral> _HistorialLaboral;
        private List<Hijos> _Hijos;
        private List<ManejoIdiomas> _ManejoIdiomas;
        private bool _Actualizado;
        private double _Salario;

        public virtual double Salario
        {
            get { return _Salario; }
            set { _Salario = value; }
        }

        public virtual bool Actualizado
        {
            get { return _Actualizado; }
            set { _Actualizado = value; }
        }

        public virtual List<ManejoIdiomas> ManejoIdiomas
        {
            get { return _ManejoIdiomas; }
            set { _ManejoIdiomas = value; }
        }

        public virtual List<Hijos> Hijos
        {
            get { return _Hijos; }
            set { _Hijos = value; }
        }

        public virtual List<HistorialAcademico> HistorialAcademico
        {
            get { return _HistorialAcademico; }
            set { _HistorialAcademico = value; }
        }
        
        public virtual List<HistorialLaboral> HistorialLaboral
        {
            get { return _HistorialLaboral; }
            set { _HistorialLaboral = value; }
        }
        /// <summary>
        /// Codigo único con el que el Estudiante o Egresado es identificado por el Sistema
        /// </summary>
        [NHibernate.Validator.Min(0)]
        public virtual int CodigoInterno
        {
            get { return _CodigoInterno; }
            set { _CodigoInterno = value; }
        }

        /// <summary>
        /// Codigo único con el que el Estudiante es identificado en la institución
        /// </summary>
        [NHibernate.Validator.Min(0)]
        public virtual int CodigoEstudiante
        {
            get { return _CodigoEstudiante; }
            set { _CodigoEstudiante = value; }
        }

        /// <summary>
        /// Documento de Identificación Nacional o Internacional del Asociado
        /// </summary>
        public virtual Identificacion Identificacion
        {
            get { return _Identificacion; }
            set { _Identificacion = value; }
        }

        public virtual string Nombres
        {
            get { return _Nombres; }
            set { _Nombres = value; }
        }

        public virtual string Apellidos
        {
            get { return _Apellidos; }
            set { _Apellidos = value; }
        }

        public virtual Sexo Sexo
        {
            get { return _Sexo; }
            set { _Sexo = value; }
        }

        /// <summary>
        /// Datos para el envío de la correspondencia de la Institución
        /// </summary>
        public virtual DatosContacto DatosCorreo
        {
            get { return _DatosCorreo; }
            set { _DatosCorreo = value; }
        }

        public virtual Identificacion LibretaMilitar
        {
            get { return _LibretaMilitar; }
            set { _LibretaMilitar = value; }
        }

        /// <summary>
        /// Email Personal
        /// </summary>
        [NHibernate.Validator.Email]
        public virtual string Email
        {
            get { return _Email; }
            set { _Email = value; }
        }

        /// <summary>
        /// Email Alterno
        /// </summary>
        [NHibernate.Validator.Email]
        public virtual string Email2
        {
            get { return _Email2; }
            set { _Email2 = value; }
        }

        /// <summary>
        /// Email de Correspondencía
        /// </summary>
        [NHibernate.Validator.Email]
        public virtual string EmailEnvio
        {
            get { return _EmailEnvio; }
            set { _EmailEnvio = value; }
        }

        public virtual string NombreCompleto()
        {
            return this.Nombres + this.Apellidos;
        }

        /// <summary>
        /// Codigo interno del Plan de Estudio del Asociado
        /// </summary>
        public virtual int CodigoPlan
        {
            get { return _CodigoPlan; }
            set { _CodigoPlan = value; }
        }

        public virtual PlanesEstudios PlanEstudio
        {
            get { return _PlanEstudio; }
            set { _PlanEstudio = value; }
        }

        [NHibernate.Validator.Length(10, 13)]
        public virtual long Celular
        {
            get { return _Celular; }
            set { _Celular = value; }
        }

        [NHibernate.Validator.Max(8)]
        [NHibernate.Validator.Min(0)]
        public virtual int EstratoSocioeconomico
        {
            get { return _EstratoSocioeconomico; }
            set { _EstratoSocioeconomico = value; }
        }

        public virtual EstadoCivil EstadoCivil
        {
            get { return _EstadoCivil; }
            set { _EstadoCivil = value; }
        }

        /// <summary>
        /// Información Académica de bachillerato o secundaria
        /// </summary>
        public virtual DatosBachiller DatosBachiller
        {
            get { return _DatosBachiller; }
            set { _DatosBachiller = value; }
        }

        public virtual DateTime FechaNacimiento
        {
            get { return _FechaNacimiento; }
            set { _FechaNacimiento = value; }
        }

        public virtual Municipios LugarNacimiento
        {
            get { return _LugarNacimiento; }
            set { _LugarNacimiento = value; }
        }

        public virtual DateTime FechaMuerte
        {
            get { return _FechaMuerte; }
            set { _FechaMuerte = value; }
        }

        /// <summary>
        /// Información de Residencia del Asociado
        /// </summary>
        public virtual DatosContacto DatosResidencia
        {
            get { return _DatosResidencia; }
            set { _DatosResidencia = value; }
        }

        public virtual TipoSangre TipoSangre
        {
            get { return _TipoSangre; }
            set { _TipoSangre = value; }
        }

        public virtual DatosLaboral DatosLaborales
        {
            get { return _DatosLaborales; }
            set { _DatosLaborales = value; }
        }

        public virtual Personas DatosPadre
        {
            get { return _DatosPadre; }
            set { _DatosPadre = value; }
        }

        public virtual Personas DatosMadre
        {
            get { return _DatosMadre; }
            set { _DatosMadre = value; }
        }

        public virtual Acudientes Acudiente
        {
            get { return _Acudiente; }
            set { _Acudiente = value; }
        }

        public virtual Personas Conyugue
        {
            get { return _Conyugue; }
            set { _Conyugue = value; }
        }

        public virtual string EPS
        {
            get { return _EPS; }
            set { _EPS = value; }
        }

        public virtual string DireccionPadres
        {
            get { return _DireccionPadres; }
            set { _DireccionPadres = value; }
        }
    }
}